Josh Sutphin
AboutIdeasNow
GamesMusicWriting

I'm available for new employment, contracts, and/or commissions. Click here for details!

How we ran our booth at MAGFest for 74 hours straight

So, MAGFest was insane.

There was an entire hall full of arcade machines, both vintage and modern:

A photo from MAGFest of the crowded arcade hall

A photo from MAGFest of a row of arcades with players seated at them

A photo from MAGFest of a large arcade machine with playable drums as the main input device

Another entire hall was dedicated to a huge array of console games dating back to the NES, plus a bunch of competitive modern games being played on huge projector screens:

A photo from MAGFest of a room full of tables with retro video game consoles set up on them

A photo from MAGFest of a giant projection of live gameplay from one of the Sonic games

A photo from MAGFest of a giant projection of live gameplay from a four-player split screen racing game

And of course there was the MAGFest Indie Videogame Showcase (MIVS):

A photo from MAGFest of part of the indie videogame space

A photo from MAGFest with another view of the indie videogame space

A photo from MAGFest of the crowd exploring the indie videogame space

55 indies were invited this year, and we were one of them. Because MAGFest runs 24 hours a day, Legacy of the Elder Star was up and playable on two machines for 74 hours straight, from noon Thursday to 2pm Sunday. Erik (the game's artist) wasn't able to come due to financial constraints, so I built and ran the booth alone.

Here's how I did it.

Legacy of the Elder Star

For those of you unfamiliar with Legacy of the Elder Star, here's a quick introduction to the game:

Constructing the booth

A photo from MAGFest of the Legacy of the Elder Star booth

There was no pipe-and-drape anywhere at MAGFest. Because big, bold artwork is a proven draw at shows, and because getting it up high (so it can be seen at a distance) is so crucial, I decided to build our own.

A product image for the Fancier photography backdrop frame

For the structure, I ordered this 8x10' photography backdrop frame for $35. It collapses down into 2.5' segments which pack together into a convenient carrying case, which would later prove important for transport since I had to fly from SLC to DC.

For the backdrop itself, I ordered two black 8' drape panels at $20 apiece from pipeanddrapeonline.com. They have a curtain rod pocket sewn into the top and bottom, making them easy to fit onto the frame. Crucially, these panels are inherently flame-retardant, which is a safety requirement per the fire code of National Harbor, MD, where MAGFest takes place.

The MIVS space provided tables, chairs, and power, but that's it. Expo center tables are always ugly and beat to hell, so I ordered this simple black tablecloth for $12 to make the table look nicer. From past experience I've noticed expo center tables tend to measure anywhere from 6-8' long and 2-3' deep, so I picked a really long tablecloth that could easily accommodate the larger tables and still be able to reach to the floor (which looks nicer).

A product image of a basic gray rug

Standing on bare concrete all day is incredibly fatiguing, so I also picked up two of these rugs (in black) from Overstock.com for $28 apiece. They're 8' long and 2.5' wide, giving us a total coverage of 8x5' when laid side-by-side. That pretty well approximates the front half of a 10x10' booth, and the back half is covered by the table (with a tablecloth that reaches the floor) so we didn't need any more floor covering back there.

I printed up two 2x6' vertical vinyl banners at GotPrint.com for $21 apiece. Erik painted the Cosmonaut banner on the right in Photoshop at a resolution of 7,200 x 21,600 (300 dpi) in CMYK color. For the screenshot banner on the left, I dumped screenshots out of the game at 4x resolution, then manually patched in our super-high-res source assets for the few elements where the compressed in-game assets didn't scale up cleanly. These banners come already grommeted; I used these 28-cent S-hooks to hang them from the backdrop frame.

I printed our 36x24" key art poster through Vistaprint.com for $20. I used this $11 grommet kit to install grommets in the top corners so I could hang it from the frame in the same fashion as the banners. To prevent curling, I took a half-dozen binding bars from this $11 pack of report covers and slid them onto the top and bottom of the poster, giving it rigid support across its width.

Here's the final product in action:

A high-angle photo of the Legacy of the Elder Star booth, showcasing the main poster and vertical side banners that gave the booth its visual focus

Equipment and security

At past shows I've demoed on one or two MacBook Pros hooked up to 27" monitors, but for a 24-hour show there's no way in hell I was going to leave those systems at the booth overnight; they're pricey enough (and portable enough) to motivate people to figure out how to cut a cable lock.

A product photo of an HP all-in-one computer

So instead I ordered two of these refurbished HP all-in-ones from NewEgg for $240 apiece. They're 19" displays and just about minimum spec to run Legacy of the Elder Star decently well and, crucially, they have a Kensington lock slot on the back.

To lock them down I picked up two of these Kensington cable locks for $20 apiece. I just wrapped the cable around one of the back table legs. It was a bit awkward with the tablecloth in the way but because I did it on the back side of the table nobody could see that. ;)

Each system also had a power cable, a mouse, and a pair of headphones attached. To lock down those peripherals I grabbed two of these $3 cable traps (one for each system). If you've never used a cable trap before, they can be a little confusing at first:

  1. Open the cable trap.
  2. Run the cables you want to lock down through any of the three small openings. I used one for the power cable, one for the mouse cable, and one for the headphone cable.
  3. Close the cable trap.
  4. Run the looped end of your Kensington cable lock through the large opening.
  5. Wrap the lock end of the cable lock around a table leg or similar, then pass it through the looped end, then attach it to the Kensington lock slot on the computer.

A photo sequence showing how to install a cable trap

This prevents the cable trap from being opened until the Kensington lock is disengaged, and that in turn prevents the power/mouse/headphone cables from being removed from the trap.

The power cable and mouse came bundled with the all-in-ones. They had a keyboard too, but Legacy of the Elder Star doesn't require a keyboard so I simply omitted it from the setup to prevent malicious players from e.g. alt-tabbing out and screwing with the OS.

A product photo of a pair of white Amazon Basics headphones

For the headphones, I ordered two pairs of $15 Amazon Basics headphones. They're on-ear and not all that comfortable, but they're fine for short sessions. Their sound quality and isolation are actually really impressive, more on par with a $60 kit. These really helped players appreciated the soundtrack in Legacy of the Elder Star, since the all-in-ones' built-in speakers are crappy and the MAGFest show floor is really loud.

I also brought a cheap power strip I had lying around, just in case. This turned out to be a good choice because we only had one plug available to service three booths. :(

That was it for booth equipment, but for myself I also ordered a pair of DownBeats earplugs for $14. These were the best investment ever. They hugely reduced the din on the convention floor while making people who were speaking at or near me much more understandable. The reduction in background noise also left me feeling much less fatigued after exhibiting each day.

Transportation and setup

I lived in the Salt Lake City area at the time, and MAGFest is just outside Washington D.C., so I had two options: either ship everything to the convention center, or check it all onto the plane.

A product photo of a black Pelican travel case

I checked shipping costs and they were eye-watering, so I decided to invest the money in this heavy-duty Pelican gear case instead. I loaded it up with both all-in-ones and custom-shaped foam (Pelican's packing foam solution is easy and brilliant) and both systems survived the rough airport baggage handling process just fine.

Pelican cases are expensive (this one – the 1610 – is $200), but they're absolute tanks. I didn't end up saving any money compared shipping costs this time, but now that I have the case I can avoid shipping costs every time from here on out, so it'll pay for itself really quickly.

I didn't want to over-pack the case and diminish the protection for the all-in-ones, so the power cables, mice, headphones, and various miscellany (masking tape, S-hooks, etc.) went in my carry-on bag with my clothes and stuff.

A product photo of a black duffel bag

All the booth decorations – the backdrop frame and drapes, vinyl banners, poster, tablecloth, and rugs – all got rolled up, one inside the other, and the whole roll went inside this $25 duffle bag, which I then checked alongside the Pelican case. This stuff didn't need protection because the roll was essentially its own protection: the backdrop frame was in the center and all the soft stuff was rolled around it in layers. This was super-easy and super-effective, and made on-site setup and teardown a breeze.

I carefully selected both the Pelican case and duffel bag to just barely fit within the airline's maximum checked baggage size restrictions. I used a cheap luggage scale to verify the weight: the duffle came in at ~35 lbs. and the Pelican case at ~45 lbs. (The downside to Pelican cases is that they're heavy: this one is 19.5 lbs. empty.)

Carting all this crap to and from the airport was slightly annoying, but the Pelican case has wheels and an extendable handle, and due to its size and construction I was able to drop the duffel on top and strap it to the handle and wheel all 80 lbs. of gear with one hand, while managing my personal carry-on with the other.

The launcher

A 24-hour build absolutely must be able to run reliably while unattended. I also wanted to make sure players stayed focused on the game and didn't need/want to screw around in the OS.

The demo machines ran Windows 10 Home. To make them demo-friendly I disabled all screen saver and power-saving options, system notifications, etc. and set a Legacy of the Elder Star-themed desktop wallpaper.

To ensure the game re-launched itself if it ever crashed or was somehow exited by the user, I wrote a simple batch file to launch it:

A screenshot of a simple batch script that launches the Legacy of the Elder Star executable inside an infinite loop

It's hilariously unsophisticated, but it's simple and it works. (This launcher.bat just sits inside the game install folder, right next to the main executable.)

To auto-launch the game at startup (in case the system ever rebooted itself, or needed to be rebooted from a hard-lock) I dropped a shortcut to launcher.bat in the Windows startup folder, which in Windows 10 can be accessed by running the shell:startup command.

A screenshot of the Windows Run dialog showing the execution of the shell:startup command

Windows 10 requires a user login at startup by default. To bypass that, I ran the netplwiz command:

A screenshot of the Windows Run dialog showing the execution of the netplwiz command

...which opens a window in which you can un-check "Users must enter a name and password to use this computer":

A screenshot of the netplwiz window with the option 'Users must enter a user name and password to use this computer' unchecked

With that set up, I could now power on the system and simply walk away: it would log in and start the game automatically, and keep restarting it if it ever exited (which it never did). And in the few instances where we did run into a soft-lock (an issue I'm still trying to track down) I was able to just quickly power-cycle the machine and avoiding having to plug in a keyboard. (As you'll recall, I omitted the keyboard from the setup to prevent users from screwing around where they shouldn't, and because it's not required for or used by the game.)

The attract loop

For the build itself, I set up an attract loop which was just a bit of script in the main shell scene that ran a timer and, if it didn't get any user input for a certain time, automatically loaded back into our intro scene (and when the intro finished playing, it loaded back into the shell scene, and so on):

A screenshot of a code snippet that implements attract loop logic

The attract scene played our game's story intro; it would've been better to play recorded gameplay, but I haven't implemented gameplay recording and running a fullscreen movie at a consistent frame rate seems to be beyond Unity's capabilities.

The attract scene is skippable by clicking the left mouse button, but during the first day I noticed several people not trying that, and instead just assuming they were looking at a non-interactive demo; they'd watch for ten seconds or so and then walk away. That night I pulled out my MacBook Pro and added a "Click LMB to play!" tag at the top of the screen during that intro, and deployed a new build to the demo machines. Friday and Saturday saw much-improved engagement.

The idle timeout

Players will not gracefully exit back to the shell when they're done; they'll just get up and walk away. I didn't want new players coming in in the middle of a run, having missed all the early patterns that are designed to teach you how to use your weapons, so I implemented a simple idle timeout where the game would automatically return to the main shell if it didn't receive any user input for 30 seconds.

A screenshot of a code snippet that implements an idle timeout

The IdleTimeout component lives on a GameObject in every scene and continuously monitors input for this timeout condition. It was easy to write and very effective.

I did experience a strange issue during Thursday's demos, though: if players left the game at the end-of-stage score screen (specifically that screen), the idle timeout wouldn't kick in. When I checked it on my MacBook that night, the IdleTimeout object was definitely present in that scene, but I could still repro the issue. Two hours of very stressful on-site debugging later, I discovered the object was actually disappearing from the scene after the scene loaded... but I have no code that's responsible for doing that.

I did manage to deploy an ugly short-term workaround that "fixed" the issue for the rest of MAGFest, by manually instantiating a new IdleTimeout in the score screen object's Start() method:

A screenshot of a code snippet that implements a hacky workaround for the idle timeout object disappearing on the score screen

I don't yet have a real explanation for this, but my current suspicion is it's related to this Unity bug in which the new SceneManagement stuff introduced in 5.3 can yank stuff from a loaded scene that shouldn't be getting yanked. (FWIW, that bug is claimed fixed in upcoming version 5.4.)

Player training

Since I was running a 24-hour booth alone, there were many, many hours where I wasn't physically at the booth to coach players who might've had trouble, which meant the game had to be very good at teaching players to play it. Fortunately this is something we've been refining for about a dozen public exhibitions now.

Because of the idle timeout, 99% of players started playing from the main shell. That meant they were taken through this screen on their way to gameplay:

A screenshot of the tutorial screen

Most players paid attention to this screen, but even though the game is very simple, they still didn't retain all this information. We reminded them to adjust their sensitivity first thing once they got into the first stage:

An in-game screenshot showing the mouse sensitivity UI prompt

This on-the-fly sensitivity adjustment has been a really popular feature, and because the prompt appears at just the moment when players will be thinking about it – the first time they move the mouse and discover it feels too fast or too slow for their tastes – they're able to apply the new information immediately, and thus retain it indefinitely.

Typical players proceed from here to play with movement and their primary (left mouse button) weapon, ignoring the secondary weapon entirely. The first stage is actually designed around that: all the primary weapons are gun-type weapons and all the enemies in the first stage approach from the right, so players can hang back to the left and shoot everything and it's very simple and rewarding.

A little ways into the level they'll inevitably fill their ability meter, which shows a new prompt:

An in-game screenshot showing the 'Ability Ready' UI prompt

Players typically press both mouse buttons immediately here, because that's what they're told to do. They're rewarded with a huge, satisfying rocket explosion and a crap-ton of score items. After that, they tend to remember how this mechanic works. ;)

It's worth noting that we do show this prompt every time your special ability becomes ready. That reminded players about the mechanic, but after they did it the first time they tended to not fire their ability immediately when prompted; they'd instead wait for a more opportune time to use it, which is exactly what we want.

At the beginning of the second stage we present a new kind of challenge in conjunction with a new prompt:

An in-game screenshot showing enemies arriving from behind the player

Stage 2 is the first time enemies attack from behind (the red arrows indicate enemies approaching from offscreen). In past builds we didn't have a prompt here, and players would respond with a panicked "how do I turn around?!" In this moment they're thinking about to solve the new problem of enemies approaching from behind; popping up the secondary weapon prompt gives them their answer, and because the mouse icon animates from side-to-side in this prompt it also demonstrates how to use it.

Players tended to respond by clicking RMB and dragging through the approaching enemies, which is the correct use of the star dash and rewarded them with kills and points. Players who never touched RMB up to this point tended to use it frequently and effectively from here on out, which was a huge design win since we've really struggled to teach that mechanic effectively for over a year now.

At this point players had been introduced to – and successfully utilized – all the core mechanics in the game. While they weren't necessarily skilled yet, they were definitely competent and engaged, as we're about to see in our analytics.

Gameplay analytics

We've been using Unity Analytics (beta) for a little while now, but it's not well-suited for on-site exhibits which lack Internet access, and because it's in beta it has a fairly severe "events per client per hour" limit which we're constantly running up against, so for MAGFest I coded up a quick local solution that uses the same event structure:

A screenshot of a code snippet showing an instance of my homebrew analytics events

...but just dumps the events out to local .csv files instead of submitting them to a server.

We gathered gameplay data for 488 sessions over 74 hours. Here's how the sessions broke down by hours of the day:

A screenshot of the analytics report showing game sessions per hour over the entire duration of MAGFest

Hour 0 is midnight, and each slice aggregates the number of sessions during that hour each day from from 12pm Thursday to 2pm Sunday. It's interesting to note that 43% of our sessions took place between the hours of 8pm to 10am the following morning, which are roughly the hours you'd expect other conventions to be shut down for. In other words, running 24 hours nearly doubled our session count!

We had 20 full clears (i.e. players who finished all five stages). The breakdown of how far each player got falls off exponentially, but that's not that unexpected: every game I've worked on has had a falloff curve similar to this at retail, and I expect it's further exacerbated in a convention setting where plenty of players are bailing after the first stage not because they want to stop playing, but because they don't want to be "that guy" who hogs the machine and prevents others from trying the game.

A screenshot of the analytics report showing the total number of clears for each of the game's five stages, which falls off exponentially

We also gathered comprehensive data on how many times players were hit by each individual enemy pattern in the game. Unsurprisingly, the five stage bosses make up the top five slots. Beyond that, the distribution is actually surprisingly consistent, which indicates we only have a very small number of "outlier" patterns that are uncomfortably difficult.

A screenshot of the analytics report showing the total number of times players were hit by each unique squad type

And finally, a few random fun stats:

What went right

We got 488 plays, gave out 200 business cards, and collected 110 new email subscribers. Those numbers are ridiculous compared to our past shows (granted, we've never done PAX). In that regard, showing at MAGFest was a phenomenal success.

I also feel like it was the perfectly-targeted audience for this game. Everyone was there to play games, and I mean "games" in the traditional sense: nobody was expecting art games, experimental games, or anything like that. (By contrast, when I went to Indiecade last year and talked to people about Legacy of the Elder Star all I got were blank stares, presumably because the game is very mainstream/commercial and not artsy/experimental at all.)

The booth design worked out very well. It visually stood out from the crowd (even though it was kinda set back in a corner) and it was pretty easy to transport, set up, and tear down.

The stuff I did with the build – auto-start, attract loop, idle timeout, and analytics – all went off pretty much without a hitch (aside from Thursday night's on-site bug-fix). It made it a ton easier to demo and, together with the also-successful equipment security setup, alleviated 100% of my stress about leaving the booth unattended, whether for bathroom breaks, lunch, or to go to sleep for the night.

Being able to leave the booth safely unattended also meant I was able to hit up a couple of the Saturday night concerts, which were amazing. I saw the Mega Man X sound team perform live (!) and spent 3+ hours in a massive chiptune rave. These were big highlights of MAGFest for me and I'm really glad I didn't have to miss them due to having a "needy" booth.

Another reason that was possible is that MAGFest takes place at a hotel – the Gaylord National Resort and Convention Center – which is incredibly convenient when you can go between the exhibit floor, the music stages, and your hotel room without even leaving the building. It's also just a really, really nice place.

What went wrong

The bug I had to fix on-site on Thursday night, where the game wouldn't idle-out from the post-game score screen, was just an absurd testing flub. I have no idea how I missed it; I'm sure I comprehensively tested idle-out in every conceivable scenario before getting on the plane, but APPARENTLY NOT.

I also experienced a very-occasional soft-lock during the outro cutscene which required a reboot to recover from. We only had 20 full clears and I personally witnessed several occasions where the outro cutscene and credits played through without issue, so we probably only hit this bug less than dozen times. I still don't know why it's happening and I haven't been able to reproduce it on a dev machine, but I do suspect it's related to Unity's scene-mangling bug I mentioned before, so hopefully it'll be addressed with the 5.4 release.

And finally: while it's awesome that MAGFest takes place in a really nice hotel, the downside is that all the food is so expensive. My wallet is just a pile of ashes at this point. If I do MAGFest again it will actually be more economical to pay for an extra night's stay at the hotel in order to arrive a day early and just go grocery shopping, and avoid the ridiculously overpriced restaurants and coffee bars.

Was it worth it?

Here's my final cost breakdown:

There are several ways I could've done this cheaper, or can do it cheaper on future trips:

...so if I do MAGFest again next year I'll bet I could cut this cost in half, or even a little bit better.

Legacy of the Elder Star is on Steam now but we're still pre-release, which means this show was never going to generate direct sales. Can you put a price on 488 play sessions, 200 business cards, and 110 new email subscribers? What about the fact that this show – being far away from home and lacking pipe-and-drape – forced me to solve logistics problems for booth construction that I'll now benefit from for every future show? Or the personal "vacation" factor of hanging out with a bunch of nerds in a party hotel for four days, playing vintage arcade games and enjoying kick-ass live music?

I'd have liked to have spent less of course, but overall I think it was worth the trip, both for me personally and for the game.

...no, wait. That's criminally understating it.

MAGFEST WAS FUCKING AWESOME AND YOU SHOULD GO. ALL OF YOU. IMMEDIATELY. ❤️

Created 2/25/2016 • Updated 12/1/2024